import { ref } from 'vue';
import { defineStore } from 'pinia';
import { UserInfoVO } from '@/api/user/types';
import { getUserInfo } from '@/api/user';

/**
 * 评论管理Store
 * @description 用于管理评论相关的用户信息和状态
 * @author 系统
 * @version 1.0.0
 * @since 2024-01-01
 */
export const useCommentStore = defineStore(
  'commentState',
  () => {
    /**
     * 评论者信息列表
     * @type {import('vue').Ref<UserInfoVO[]>}
     * @description 存储所有评论者的用户信息，避免重复获取
     */
    const commenterInfoList = ref<UserInfoVO[]>([]);

    /**
     * 根据用户ID获取评论用户信息
     * @param {number} id - 用户ID
     * @returns {Promise<UserInfoVO>} 用户信息Promise
     * @description 先从缓存中查找用户信息，如果不存在则从API获取并缓存
     */
    const getCommenterInfo = (id: number): Promise<UserInfoVO> =>
      new Promise((resolve, reject) => {
        const existingUser = commenterInfoList.value.find(item => item.userId === id);
        if (existingUser) {
          resolve(existingUser);
        } else {
          getUserInfo(id)
            .then(({ data }) => {
              console.log('当前评论用户信息：', data);
              commenterInfoList.value.push({
                userId: data.userId,
                username: data.nickname,
                avatar: data.avatar,
                level: data.level,
                like: data.like,
                attention: data.attention,
                follower: data.follower
              });
              resolve(data);
            })
            .catch(error => {
              reject(error);
            });
        }
      });

    /**
     * 重置评论状态
     * @returns {Promise<null>} 空Promise，用于异步操作
     * @description 清空评论者信息缓存，恢复初始状态
     */
    const resetCommentState = () => {
      commenterInfoList.value = [];
      return Promise.resolve(null);
    };

    return {
      commenterInfoList,
      getCommenterInfo,
      resetCommentState
    };
  },
  {
    // 进行持久化存储
    persist: {
      key: 'commentState',
      storage: window.localStorage
    }
  }
);
